package com.glela.serial.service;

import com.glela.common.exception.BizException;
import com.glela.goods.model.vo.goods.GoodsSimpleVo;
import com.glela.serial.model.Serial;
import com.glela.serial.model.request.RequestSerial;
import com.glela.serial.model.response.*;
import com.glela.serial.model.response.hometitle.ResponseHomeTitle;
import com.glela.serial.model.response.hometitle.ResponseHomeTitleInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 期资讯service
 * 
 * @author 卫耀华
 *
 */
public interface SerialService {
	/**
	 * <dl>
	 * <dt>查询首页推荐标题列表</dt>
	 * </dl>
	 * @return List<SimpleSerialVo>
	 * @author zls
	 * @date 2017年7月7日 下午4:21:26
	 */
	public List<ResponseHomeTitle> findSerials();

	/**
	 * <dl>
	 * <dt>查询首页推荐标题详细信息</dt>
	 * </dl>
	 * @param requestSerial TODO
	 * @return ResponseSerialDetail
	 * @author zls
	 * @date 2017年7月7日 下午4:21:47
	 */
	public ResponseHomeTitleInfo findSerialInfo(RequestSerial requestSerial);
	/**
	 * 普通期详情
	 * 
	 * @author 卫耀华
	 * @param serialId
	 * @return
	 */
	public ResponseSerialDetail getNomalSerialDetailBySerialId(long userId, long shareUserId, int serialId);

	/**
	 * 根据期资讯ID获取本期详情（达人或讲师发布的期）
	 * 
	 * @author 卫耀华
	 * @param serialId
	 * @param userId
	 * @return
	 */
	public ResponseTalentSerialDetail getTalentSerialDetailByTalentSerialId(int serialId, long userId, long shareUserId)
			throws BizException;

	/**
	 * 点击达人社区期详情后，期浏览量+1
	 * 
	 * @author 卫耀华
	 * @param serialId
	 */
	public void updateTalentSerialSeeCount(int serialId);

	/**
	 * 首页今日推荐的咨询期
	 * 
	 * @author 卫耀华
	 * @return
	 */
	public List<ResponseSerial> getSerialsToday(long userId);

	/**
	 * 首页今日推荐旁边点击更多
	 * 
	 * @author 卫耀华
	 * @date 2016-10-21
	 * @param startPage
	 * @param pageSize
	 * @return
	 */
	public List<ResponseSerial> getMoreNomalSerialList(long userId, int startPage, int pageSize);

	/**
	 * 首页今日推荐旁边点击更多,统计总条数
	 * 
	 * @author 卫耀华
	 * @date 2016-10-21
	 * @return
	 */
	public int countMoreNomalSerialNum();

	/**
	 * 品牌发布的期
	 * 
	 * @author 卫耀华
	 * @param brandId
	 * @param startPage
	 * @param pageSize
	 * @return
	 */
	public List<SimpleSerialVo> selectSerialsByBrandId(int brandId, int startPage, int pageSize);

	/**
	 * 品牌发布的期
	 * 
	 * @author 卫耀华
	 * @param brandId
	 * @return
	 */
	public int countSerialsByBrandId(int brandId);

	/**
	 * 福利社
	 * 
	 * @author 卫耀华
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List<SimpleSerialVo> selectFulisheSerialList(int startIndex, int pageSize);

	/**
	 * 福利社
	 * 
	 * @author 卫耀华
	 * @return
	 */
	public int selectFulisheSerialNum();

	/**
	 * 达人社区（最新、讲师、达人、关注）
	 * 
	 * @author 卫耀华
	 * @param tabIndex
	 * @param userId
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List<ResponseTalentSerial> community(int tabIndex, Long userId, int startIndex, Integer pageSize)
			throws BizException;

	/**
	 * 达人社区（最新、讲师、达人、关注）
	 * 
	 * @author 卫耀华
	 * @param tabIndex
	 * @param userId
	 * @return
	 */
	int countCommunity(int tabIndex, Long userId) throws BizException;

	/**
	 * 普通期浏览量+1
	 * 
	 * @author 卫耀华
	 * @param serialId
	 */
	public void updateNomalSerialSeeCount(int serialId);

	/**
	 * 达人主页要展示的期
	 * 
	 * @author 卫耀华
	 * @param talentId
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List<SimpleSerialVo> selectTalentSerialByPagination(Long talentId, int startIndex, Integer pageSize);

	/**
	 * 统计达人主页期资讯总个数
	 * 
	 * @author 卫耀华
	 * @param talentId
	 * @return
	 */
	public int countTalentSerialNumByTalentId(Long talentId);

	/**
	 * 热门资讯(浏览数最多的资讯)
	 * 
	 * @author 卫耀华
	 * @return
	 */
	public List<SimpleSerialVo> selectHotSerials();

	/**
	 * 达人进入我的资讯
	 * 
	 * @author 卫耀华
	 * @param talentId
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List<ResponseSerial> myTalentSerialList(Long talentId, int startIndex, Integer pageSize);

	/**
	 * 达人进入我的资讯
	 * 
	 * @author 卫耀华
	 * @param talentId
	 * @return
	 */
	public int countMyTalentSerialList(Long talentId);

	/**
	 * 查询达人期
	 * 
	 * @author 程哲权
	 * @param TalentSerialId
	 * @param userId
	 * @return
	 */
	public ResponseSerialVo selectTalentSerial(int TalentSerialId, long userId);

	/**
	 * 普通资讯不需要商品
	 * 
	 * @param serial
	 * @return
	 */
	public SimpleSerialVo nomalSerialNoGoods(Serial serial);

	/**
	 * 达人期下的商品
	 * 
	 * @param serialId
	 * @param shareUserRoleId
	 * @param roleId
	 * @return
	 */
	public List<GoodsSimpleVo> getGoodsBySerialId(int serialId, int shareUserRoleId, int roleId);

	public ResponseHomeTitleInfo findSerialInfoNew(RequestSerial requestSerial, HttpServletRequest request);
}
